<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    // 只复制第一层的浅拷贝
    // function simpleCopy(obj1) {
    //   var obj2 = Array.isArray(obj1) ? [] : {}
    //   for (let i in obj1) {
    //     obj2[i] = obj1[i]
    //   }
    //   return obj2
    // }
    // var obj1 = {
    //   a: { k: 9 },
    //   b: 2,
    //   c: {
    //     d: 3,
    //   },
    // }
    // var obj2 = simpleCopy(obj1)
    // obj2.a.k = 3
    // obj2.c.d = 4
    // console.log(obj1.a.k) //  9   3
    // console.log(obj2.a.k) // 3
    // console.log(obj1.c.d) // 4
    // console.log(obj2.c.d) // 4
    //浅拷贝
    var obj = {
      a: 1,
      b: 2,
    }
    var obj1 = Object.assign(obj)
    obj1.a = 3
    console.log(obj)

    let a = [0, 1, 2, 3, 4],
      b = a
    console.log(a === b)
    a[0] = 1
    console.log(a, b)

    //深拷贝
    let obj1 = {
      a: 1,
      b: 2,
    }
    let obj2 = {
      a: obj1.a,
      b: obj1.b,
    }
    obj2.a = 3
    console.log(obj1.a) // 1
    console.log(obj2.a) // 3

    // 当value是基本数据类型，比如String，Number，Boolean时，是可以使用拓展运算符进行深拷贝的
    // 当value是引用类型的值，比如Object，Array，引用类型进行深拷贝也只是拷贝了引用地址，所以属于浅拷贝
    var car = { brand: 'BMW', price: '380000', length: { a: '3m' } }
    var car1 = { ...car, price: '500000' }
    car1.length.a = '10米'
    console.log(car1) // { brand: "BMW", price: "500000", length: "5米" }
    console.log(car) // { brand: "BMW", price: "380000", length: "5米" }
  </script>
</html>
